package com.useeinfo.oa.common.utils.ResultUtil;

import com.useeinfo.oa.common.enums.ResultEnums;

/**
 * 统一的返回结果集
 *
 * @author GeniusJ
 * @email 975473185@qq.com
 * @date 2017-11-20
 * @time 9:42
 */
public class ResultUtil {
    /**
     * 无参成功
     * @param <T>
     * @return
     */
    public static <T> ResultDto<T> success(){
        return general(ResultEnums.SUCCESS,null,null);
    }

    /**
     * 自定义成功提示内容
     * @param msg 提示内容
     * @param <T>
     * @return
     */
    public static <T> ResultDto<T> success(String msg){
        return general(ResultEnums.SUCCESS,msg,null);
    }

    /**
     * 成功后返回的就提数据
     * @param data 数据内容
     * @param <T>
     * @return
     */
    public static <T> ResultDto<T> success(T data){
        return general(ResultEnums.SUCCESS,null,data);
    }

    /**
     * 带成功提示的内容返回
     * @param msg 提示
     * @param data 内容
     * @param <T>
     * @return
     */
    public static <T> ResultDto<T> success(String msg,T data){
        return general(ResultEnums.SUCCESS,msg,data);
    }

    /**
     * 无参错误返回
     * @param <T>
     * @return
     */
    public static <T> ResultDto<T> error(){
        return general(ResultEnums.FAILURE,null,null);
    }

    /**
     * 带提示的错误
     * @param errorMsg
     * @param <T>
     * @return
     */
    public static <T> ResultDto<T> error(String errorMsg){
        return general(ResultEnums.FAILURE,errorMsg,null);
    }

    /**
     *  异常
     * @param <T>
     * @return
     */
    public static <T> ResultDto<T> exception(){
        return general(ResultEnums.EXCEPTION,null,null);
    }

    /**
     * 带提示的异常
     * @param exceptionMag
     * @param <T>
     * @return
     */
    public static <T> ResultDto<T> exception(String exceptionMag){
        return general(ResultEnums.EXCEPTION,exceptionMag,null);
    }

    /**
     * 其他通用错误返回，以状态码为准
     * @param resultEnumError 错误枚举
     * @param <T>
     * @return
     */
    public static <T> ResultDto<T> error(ResultEnums resultEnumError){
        return general(resultEnumError,null,null);
    }

    /**
     * 带提示内容的通用错误返回，以状态码为准
     * @param resultEnumError
     * @param errorMsg
     * @param <T>
     * @return
     */
    public static <T> ResultDto<T> error(ResultEnums resultEnumError,String errorMsg){
        return general(resultEnumError,errorMsg,null);
    }

    public  static <T>ResultDto<T> general(ResultEnums resultEnum,String msg,T data){
        ResultDto<T> result=new ResultDto<T>();
        result.setStatus(resultEnum.getCode());
        if (null==msg || msg.isEmpty()){
            result.setMsg(resultEnum.getDesc());
        }else{
            result.setMsg(msg);
        }
        if (null!=data){
            result.setData(data);
        }
        return result;
    }
}
